~/.bashrc
# Levels of indirection and time
PS4='+\011\[\e[3;34m\]\t\[\e[0m\]'
# User ID [Effective user ID]: Groups of user is a member
PS4+=' \[\e[0;35m\]$UID[$EUID]:$GROUPS\[\e[0m\] '
# Shell level and subshell
PS4+='\011\[\e[1;31m\]L$SHLVL:S$BASH_SUBSHELL\[\e[0m\]'
# Source file
PS4+=' \[\e[1;33m\]${BASH_SOURCE:-$0}\[\e[0m\]'
# Line number
PS4+='\[\e[0;36m\]#:${LINENO}\[\e[0m\]'
# Function name
PS4+='\011\[\e[1;32m\]${FUNCNAME[0]:+${FUNCNAME[0]}(): }\[\e[0m\]'
# Executed command
PS4+='\n# '
export PS4
PS0
- Значение этого параметра раскрывается и отображается интерактивными оболочками после прочтения команды и до ее выполнения. Т.е. это будет напечатано перед исполнением каждой команды, по умолчанию не установлено.PS1
- Значение этого параметра раскрывается и используется в качестве основной строки приглашения. Это ваше стандартное приветствие user@host:~
PS2
- Значение этого параметра раскрывается, как и в случае с PS1
, и используется в качестве дополнительной строки приглашения.PS3
- Значение этого параметра используется в качестве подсказки для команды select
.PS4
- Значение этого параметра расширяется, как в случае с PS1, и значение печатается перед отображением каждой команды bash во время трассировки выполнения. Первый символ расширенного значения PS4 при необходимости повторяется несколько раз, чтобы указать несколько уровней косвенного обращения. По умолчанию +
Пояснение к bashrc
+
- Первый символ, отображает уровни косвенного обращения к командам, эта часть осталась как в оригинальном PS4
.\t
- Текущее время, полезно для изучения тайминга команд, может быть заменено к примеру командой date '+%x %X:%N %z'
для более подробного информирования, включая отображение наносекунд.$UID[$EUID]:$GROUPS
- Выведем ID и эффективный ID пользователя, перечисляем группы, членом которых является текущий пользователь. Это будет полезно для скриптов выполняющих действия от разных пользователей.L$SHLVL:S$BASH_SUBSHELL
- Отображения уровня оболочки, и уровня вложенной подоболочкой. Когда вы запускаете команду в оболочке, она запускается на уровне, называемом уровнем оболочки. Внутри оболочки вы можете открыть другую оболочку, которая делает её подоболочкой, или оболочку, которая её открыла.SHLVL
поможет понять насколько глубоко вы находитесь в дочерних сессиях, ведь у каждой последующей оболочки могут быть добавлены или переопределены важные вам параметры.BASH_SUBSHELL
позволяет отслеживать все дочерние вызванные оболочки, к примеру, дочерняя оболочка не может вернуть переменную в родительскую оболочку.${BASH_SOURCE:-$0}
- Имя исполняемого файла или функции.#:${LINENO}
- Номер трассируемой строки.${FUNCNAME[0]:+${FUNCNAME[0]}(): }
- Имя функции в рамках которой происходит исполнение.